namespace wmedu {

    export class BuildUtil {

        static OpStr = ['+', '-', '×', '÷']

        static getValue(a: number, b: number, op: Enum_OralOp) {
            let v = 0;
            if (op == Enum_OralOp.Add) {
                v = a + b;
            } else if (op == Enum_OralOp.Sub) {
                v = a - b;
            } else if (op == Enum_OralOp.Mul) {
                v = a * b;
            } else if (op == Enum_OralOp.Div) {
                v = a / b;
            }
            return v;
        }

        /**
         * 获取整个式子的等式字符串
         * @param blankSide 空格在式子的位置，0等号左边，1等号右边，2等号
         * @param blankStr 空格在式子的显示
         * @param nums 式子左边的数字
         * @param ops 式子左边的符号
         * @param value 式子右边的值
         * @param brackets 括号的idx位置，只有2个数字(最多只有3个数字，所以括号也只有一对)
         */
        static getOralStr(blankSide: number, blankStr: string, nums: number[], ops: Enum_OralOp[], value: number, brackets = []) {
            let str = ''
            let b0 = brackets[0];
            let b1 = brackets[1];
            if (blankSide == 0) {
                let idx = MathUtil.randomFloor(nums.length);// 空格所在位置
                let left = ''
                for (let i = 0; i < nums.length; i++) {
                    left += (b0 == i ? '(' : '') + (idx == i ? blankStr : nums[i]) + (b1 == i ? ')' : '') + (i >= ops.length ? "" : BuildUtil.OpStr[ops[i]]);
                }
                str = `${left}=${value}`

            } else if (blankSide == 1) {
                let left = ''
                for (let i = 0; i < nums.length; i++) {
                    left += (b0 == i ? '(' : '') + nums[i] + (b1 == i ? ')' : '') + (i >= ops.length ? "" : BuildUtil.OpStr[ops[i]]);
                }
                str = `${left}=${blankStr}`
            }
            return str;
        }

    }
}